package org.springframework.beans.factory.support;

import org.springframework.beans.BeansException;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;

/**
 * @Name BeanDefinitionReader
 * @Description: 读取 BeanDefinition 信息的接口
 * 描述信息：读取 BeanDefinition 信息的接口。
 * 目的：通过 ResourceLoader 资源加载器读取 Bean 配置文件，解析出 BeanDefinition 信息，然后注册到 Bean 容器中。
 * @Version v1.0.0
 * @Author: lichao
 * @Date: 2024-03-15 17:24:41
 **/
public interface BeanDefinitionReader {

    /**
     * 获取资源加载器
     *
     * @return org.springframework.core.io.ResourceLoader 资源加载器
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-15 17:29:25
     */
    ResourceLoader getResourceLoader();

    /**
     * 获取 BeanDefinition 注册表
     *
     * @return org.springframework.beas.factory.support.BeanDefinitionRegistry BeanDefinition 注册表
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-15 17:28:44
     */
    BeanDefinitionRegistry getBeanDefinitionRegistry();

    /**
     * 导入 BeanDefinition 信息
     *
     * @param resource 资源接口
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-15 17:29:47
     */
    void loadBeanDefinitions(Resource resource) throws BeansException;

    /**
     * 导入 BeanDefinition 信息
     *
     * @param location 资源位置
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-15 17:30:46
     */
    void loadBeanDefinitions(String location) throws BeansException;

    /**
     * 导入 BeanDefinition 信息
     *
     * @param locations 资源位置列表
     * @version v1.0.0
     * @author lichao
     * @date 2024-03-15 17:31:14
     */
    void loadBeanDefinitions(String[] locations) throws BeansException;

}
